package com.wg.net;

/**
 * 断开连接的原因枚举，描述不同的断开场景。
 *
 * @author 少爷123
 */
public enum DisconnectReason {
    /**
     * 主动正常断开（如用户主动退出）
     */
    Disconnect("主动正常断开"),

    /**
     * 客户端自动断开（如客户端主动关闭连接）
     */
    ClientDisconnect("客户端自动断开"),

    /**
     * 服务端主动踢人（如管理员操作或账号异常）
     */
    ManagedDisconnect("服务端踢人"),

    /**
     * 连接超时断开（如长时间无数据交互）
     */
    TimeoutDisconnect("超时断开"),

    /**
     * 会话不存在（如尝试使用已失效的会话连接）
     */
    SessionNotExist("会话不存在"),

    /**
     * 异常导致的断开（如网络错误、服务崩溃等）
     */
    ExceptionDisconnect("异常导致的断开");

    private final String desc;

    /**
     * 构造方法（枚举默认私有，无需显式声明）
     *
     * @param desc 断开原因的描述
     */
    DisconnectReason(String desc) {
        this.desc = desc;
    }

    /**
     * 获取断开原因的描述
     *
     * @return 描述字符串
     */
    public String getDesc() {
        return desc;
    }

    /**
     * 重写toString，直接返回描述，提升可读性
     *
     * @return 描述字符串
     */
    @Override
    public String toString() {
        return desc;
    }

    /**
     * 根据描述字符串查找对应的断开原因枚举
     *
     * @param desc 描述字符串
     * @return 匹配的枚举实例
     * @throws IllegalArgumentException 未找到匹配项时抛出
     */
    public static DisconnectReason fromDesc(String desc) {
        for (DisconnectReason reason : values()) {
            if (reason.desc.equals(desc)) {
                return reason;
            }
        }
        throw new IllegalArgumentException("无效的断开原因描述: " + desc);
    }
}